package createpattern.prototype.deepcopy.falseexample;

import java.io.Serializable;

public class Citation implements Cloneable, Serializable {
    private static final long serialVersionUID = 1L;

    private Student stu;

    public Student getStu() {
        return stu;
    }

    public void setStu(Student stu) {
        this.stu = stu;
    }

    public void show() {
        System.out.println(stu.getName() + "同学：在2024学年第一学期中表现优秀，被评为三好学生。");
    }

    @Override
    protected Citation clone() throws CloneNotSupportedException {
        return (Citation) super.clone();
    }

    /**
     * stu对象和stu1对象是同一个对象，就会产生将stu1对象中name属性值改为“李四”，两个
     * Citation（奖状）对象中显示的都是李四。这就是浅克隆的效果，对具体原型类（Citation）中的
     * 引用类型的属性进行引用的复制。这种情况需要使用深克隆。
     * */
    public static void main(String[] args) throws CloneNotSupportedException {
        Citation c1 = new Citation();
        Student stu1 = new Student("张三", "广东");
        c1.setStu(stu1);


        Citation c2 = c1.clone();
        Student stu2 = c2.getStu();

        System.out.println(stu1 == stu2); // true

        c1.show(); // 张三同学：在2024学年第一学期中表现优秀，被评为三好学生。
        c2.show(); // 张三同学：在2024学年第一学期中表现优秀，被评为三好学生。
    }
}
